# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/17 11:08 
@Author  : ZhangShenao 
@File    : 4.SelfAskWithSearch自主询问搜索代理.py 
@Desc    : 使用Self-Ask with Search 自主询问搜索代理

Self-Ask with Search,自主询问搜索代理
它利用一种叫做Follow-up Question(追问) 加Intermediate Answer(中间答案)的技巧
来辅助大模型寻找事实性问题的过渡性答案,从而引出最终答案

"""
import os

import dotenv
from langchain.agents import initialize_agent, AgentType
from langchain_community.utilities import SerpAPIWrapper
from langchain_core.tools import Tool
from langchain_openai import ChatOpenAI

# 加载环境变量
dotenv.load_dotenv()

# 创建LLM
llm = ChatOpenAI(model_name='gpt-3.5-turbo', openai_api_base=os.getenv('OPENAI_API_BASE'))

# 创建SerpAPIWrapper工具
serp_api = SerpAPIWrapper()

# 使用SerpAPIWrapper,构建工具链
tools = [
    Tool(
        name='Intermediate Answer',
        func=serp_api.run,
        description='useful for when you need to ask with search',
    )
]

# 初始化Agent
# Agent模式为Self-Ask with Search 自主询问搜索代理
agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.SELF_ASK_WITH_SEARCH,
    verbose=True
)

# 执行Agent,获取结果
agent.run('使用玫瑰作为国花的国家的首都是哪里？')
